<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <input type="text" />
    <script>
      let input = document.querySelector('input');
      function fn1() {
        console.log('111');
      }
      // input.addEventListener('keyup', debounce(fn1, 1000));
      // function debounce(fn, wait) {
      //   let timer = null;
      //   return function () {
      //     if (timer) clearTimeout(timer);
      //     timer = setTimeout(() => {
      //       console.log(this);
      //       fn.apply(this, arguments);
      //     }, wait);
      //   };
      // }
      input.addEventListener('keyup', debounce(fn1, 1000, true));
      function debounce(fn, wait, immediate) {
        let timer = null;
        return function () {
          let args = arguments;
          if (timer) clearTimeout(timer);
          if (immediate) {
            let flag = !timer;
            if (flag) {
              fn.apply(this, args);
            }
            timer = setTimeout(function () {
              timer = null;
            }, wait);
          } else {
            timer = setTimeout(() => {
              fn.apply(this, args);
            }, wait);
          }
        };
      }
    </script>
  </body>
</html>
